var subtract = function(a, b) { return b - a; };
var _ = {}
// Using a placeholder
subFrom20 = partial(subtract, 20);
// subFrom20(5);

function partial(fn) {
    var args = [].slice.call(arguments, 1) // [ _, 20 ]
    return function() {
      // 找到args里面的 _ , 往其位置上填充arguments
      var len = args.length
      for (var i = 0; i < len; i++) {
        // args[i] = args[i] === _ ? arguments[0] : args[i];
        if (args[i] === _) {
          args[i] = arguments[0];
          [].shift.call(arguments)
        }
      }
      
      args = args.concat([].slice.call(arguments)) 
      console.log(args, '----');
      return fn.apply(this, args)
    }
  }
  

console.log(subFrom20(5));